import { reqShopCartList, reqDeleteShopCart, reqUpdateShopCartChecked } from "@/api";

//准备 actions 对象：响应组件中用户的动作
const actions = {
    //查询商品详情，需要商品ID
    async getCartList({ commit }) {
        let result = await reqShopCartList();
        if (result.code == 200) {
            commit("GET_CART_LIST", result.data);
        }
    },

    //删除购物车某个商品
    async deleteCartListBySkuId({ commit }, skuId) {
        let result = await reqDeleteShopCart(skuId);
        if (result.code == 200) {
            return "ok";
        } else {
            return Promise.reject(new Error("faile"));
        }
    },

    //修改商品的勾选状态
    async reqUpdateShopCartChecked({ commit }, { skuId, isChecked }) {
        let result = await reqUpdateShopCartChecked(skuId, isChecked);
        if (result.code == 200) {
            return "ok";
        } else {
            return Promise.reject(new Error("faile"));
        }
    },

    //删除全部勾选的商品
    deleteAllCheckedCart({ dispatch, getters }) {
        //定义一个数组用于存储被删除勾选的商品
        let skuArr = [];
        //判断仓库中的商品是否是勾选状态，并逐个删除
        getters.cartList.cartInfoList.forEach((item) => {
            let promise = "";
            if (item.isChecked == 1) {
                promise = dispatch("deleteCartListBySkuId", item.skuId);
            }
            //将每一次返回的 promise 添加到数组
            skuArr.push(promise);
        });
        return Promise.all(skuArr);
    },

    //修改【全选】状态
    updateAllCartIsChecked({ dispatch }, isChecked) {
        //定义一个数组用于存储被取消勾选的商品
        let skuArr = [];
        state.cartList[0].cartInfoList.forEach((item) => {
            let promise = dispatch("reqUpdateShopCartChecked", {
                skuId: item.skuId,
                isChecked, //key-value 同名可以只传递一个
            });
            skuArr.push(promise);
        });
        return Promise.all(skuArr);
    }

};

//准备 mutations 对象：修改 state 中的数据
const mutations = {
    GET_CART_LIST(state, cartList) {
        state.cartList = cartList;
    }
};
//准备 state 对象：保存具体的数据
const state = {
    cartList: [],
};

//计算属性
//项目当中 getters 主要的作用是简化仓库中的数据
const getters = {
    cartList(state) {
        return state.cartList[0] || {};
    }
};

//创建并暴露 store
export default {
    actions,
    mutations,
    getters,
    state
}